const dayjs = require('dayjs');

const Service = require('egg').Service;

class CarService extends Service {
  constructor() {
    super(...arguments);
    /**
     *@abstract 初始化连接的数据库 db1
    */
    this.client1 = this.app.mysql.get('db1');
  }

  /**
   * 获取报名数据
  * @param root0
  * @param root0.id 主键id
  * @param root0.pageSize 分页大小
  * @param root0.pageNum 当前分页数
  * @param root0.table 表名
  * @param root0.options 查表扩展参数
  */
  async getBMList({ id, pageSize, pageNum, table, options = {} }) {
    const { findOneDb, queryWithLike } = this.ctx.helper;
    try {
      if (id) {
        return await findOneDb(this.client1, table, { id });
      }
      const result = await queryWithLike(this.client1, table, {
        where: options?.where, // WHERE 条件
        columns: [], // 要查询的表字段
        orders: [[ 'id', 'desc' ]], // 排序
        pageSize, // 分页数据
        pageNum, // 当前页码
      });
      return result;
    } catch (error) {
      throw new Error(`数据查询失败${error}`);
    }
  }

  /**
  * 根据主键id更新报名信息
  * @param data
  * @param data.table 表名
  * @param data.row 需要更新的数据
  * @param data.options 扩展参数
  */
  async updateBMBy({ table, row, options = {} }) {
    const { updateDb } = this.ctx.helper;
    try {
      const result = await updateDb(this.client1, table, row, options);
      return result;
    } catch (error) {
      throw new Error('数据更新失败');
    }
  }

  /**
	 * 根据主键id删除报名信息
	* @param root0
	* @param root0.table 表名
	* @param root0.id 主键id
	*/
  async deleteBMBy({ table, id }) {
    const { deleteDb } = this.ctx.helper;
    try {
      const result = await deleteDb(this.client1, table, { id });
      return result;
    } catch (error) {
      throw new Error('数据删除失败');
    }
  }

  /**
   * 导出报名数据
  * @param table mysql表名
  * @param header excel表头
  * @param options 扩展参数
  */
  async exportAll(table, header, options = {}) {
    const { ctx } = this;
    const { where = {}, pageSize, pageNum } = options;
    const { queryWithLike } = ctx.helper;
    const headers = [ header ];
    const result = await queryWithLike(this.client1, table, {
      where, // WHERE 条件
      orders: [[ 'id', 'desc' ]], // 排序
      pageSize, // 分页数据
      pageNum, // 当前页码
    });
    const rows = result.list.map(item => {
      item.createtime = dayjs(parseInt(`${item.createtime}000`)).format('YYYY-MM-DD HH:mm:ss');
      return item;
    });
    const list = [
      rows,
    ];
    await ctx.service.tools.exportExcel(headers, list);
  }
}


module.exports = CarService;
